package com.party.core.service.file.impl;

import com.google.common.base.Strings;
import com.party.common.paging.Page;
import com.party.core.dao.read.file.ImgResourceReadDao;
import com.party.core.dao.write.file.ImgResourceWriteDao;
import com.party.core.model.BaseModel;
import com.party.core.model.file.ImgResource;
import com.party.core.service.file.IImgResourceService;
import com.sun.istack.NotNull;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.collections.map.HashedMap;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.*;

@Service
public class ImgResourceService implements IImgResourceService {

	@Autowired
	private ImgResourceReadDao imgResourceReadDao;

	@Autowired
	private ImgResourceWriteDao imgResourceWriteDao;

	@Override
	public String insert(ImgResource imgResource) {
		BaseModel.preInsert(imgResource);
		boolean result = imgResourceWriteDao.insert(imgResource);
		if (result) {
			return imgResource.getId();
		}
		return null;
	}

	/**
	 * 图片资源更新
	 * 
	 * @param imgResource
	 *            图片资源信息
	 * @return 更新结果（true/false）
	 */
	@Override
	public boolean update(ImgResource imgResource) {
		imgResource.setUpdateDate(new Date());
		return imgResourceWriteDao.update(imgResource);
	}

	/**
	 * 逻辑删除图片资源
	 * 
	 * @param id
	 *            实体主键
	 * @return 删除结果（true/false）
	 */
	@Override
	public boolean deleteLogic(@NotNull String id) {
		if (Strings.isNullOrEmpty(id)) {
			return false;
		}
		return imgResourceWriteDao.deleteLogic(id);
	}

	/**
	 * 物理删除图片资源信息
	 * 
	 * @param id
	 *            实体主键
	 * @return 删除结果（true/false）
	 */
	@Override
	public boolean delete(@NotNull String id) {
		if (Strings.isNullOrEmpty(id)) {
			return false;
		}
		return imgResourceWriteDao.delete(id);
	}

	/**
	 * 批量逻辑删除图片资源信息
	 * 
	 * @param ids
	 *            主键集合
	 * @return 删除结果（true/false）
	 */
	@Override
	public boolean batchDeleteLogic(@NotNull Set<String> ids) {
		if (CollectionUtils.isEmpty(ids)) {
			return false;
		}
		return imgResourceWriteDao.batchDeleteLogic(ids);
	}

	/**
	 * 批量物理删除图片资源信息
	 * 
	 * @param ids
	 *            主键集合
	 * @return 删除结果（true/false）
	 */
	@Override
	public boolean batchDelete(@NotNull Set<String> ids) {
		if (CollectionUtils.isEmpty(ids)) {
			return false;
		}
		return imgResourceWriteDao.batchDelete(ids);
	}

	/**
	 * 根据主键获取图片资源信息
	 * 
	 * @param id
	 *            主键
	 * @return 图片资源信息列表
	 */
	@Override
	public ImgResource get(String id) {
		return imgResourceReadDao.get(id);
	}

	/**
	 * 分页查询图片资源信息
	 * 
	 * @param imgResource
	 *            图片资源信息
	 * @param page
	 *            分页信息
	 * @return 图片资源列表
	 */
	@Override
	public List<ImgResource> listPage(ImgResource imgResource, Page page) {
		return imgResourceReadDao.listPage(imgResource, page);
	}

	@Override
	public List<ImgResource> listPageWithParam(ImgResource imgResource, Map<String, Object> param, Page page) {
		return imgResourceReadDao.listPageWithParam(imgResource, param, page);
	}

	/**
	 * 查询所有图片资源信息
	 * 
	 * @param imgResource
	 *            图片资源信息
	 * @return 图片资源列表
	 */
	@Override
	public List<ImgResource> list(ImgResource imgResource) {
		return imgResourceReadDao.listPage(imgResource, null);
	}

	/**
	 * 批量查询图片资源信息
	 * 
	 * @param ids
	 *            主键集合
	 * @param imgResource
	 *            图片资源信息
	 * @param page
	 *            分页信息
	 * @return 图片资源信息列表
	 */
	@Override
	public List<ImgResource> batchList(@NotNull Set<String> ids, ImgResource imgResource, Page page) {
		if (CollectionUtils.isEmpty(ids)) {
			return Collections.EMPTY_LIST;
		}
		return imgResourceReadDao.batchList(ids, new HashedMap(), page);
	}


}
